# -*- coding: utf-8 -*-
# @Time    : 2020/3/16 下午8:14
# @Author  : lilong

"""
回调2
"""

# ==============================
# 代码框架1：面向过程的实现方式
# ==============================
def callback(*args, **kwargs):
    """回调函数"""
    # todo 函数体的实现


def otherFun(fun, *args, **kwargs):
    """高阶函数，也叫包含函数"""
    # todo 函数体的实现


# 函数的调用方式
otherFun(callable)


# 基于框架的实现1
# ==============================
def isEvenNumber(num):
    """具体函数实现1"""
    return num % 2 == 0


def isGreaterThanTen(num):
    """具体函数实现2"""
    return num > 10


def getResultNumbers(fun, elements):
    """类似于接口函数，把传入的数据和函数实现"""
    newList = []
    for item in elements:
        if (fun(item)):
            newList.append(item)
    return newList


def Callback():
    """具体的回调函数实现"""

    elements = [2, 3, 6, 9, 12, 15, 18]

    # 回调函数（接口），传入具体的运算函数和列表
    list1 = getResultNumbers(isEvenNumber, elements)
    list2 = getResultNumbers(isGreaterThanTen, elements)
    print("所有的偶数：", list1)
    print("大于10的数：", list2)


def Filter():
    """代用filter(lambda)函数"""
    elements = [2, 3, 6, 9, 12, 15, 18]
    list1 = list(filter(lambda x: x % 2 == 0, elements))
    list2 = list(filter(lambda x: x > 10, elements))
    print("所有的偶数：", list1)
    print("大于10的数：", list2)


if __name__ == '__main__':

    # 具体实现回调函数
    Callback()

    # 使用filter函数
    Filter()
